package com.taijihuabao.modules.controller;

import com.taijihuabao.common.jsonresult.JsonResult;
import com.taijihuabao.common.commonutils.PageResult;
import com.taijihuabao.modules.model.basedto.IdDTO;
import com.taijihuabao.modules.model.basedto.FileDTO;
import com.taijihuabao.modules.model.user.dto.*;
import com.taijihuabao.modules.model.user.vo.UserInfoVO;
import com.taijihuabao.modules.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author 用户管理
 */
@Api(tags = "用户管理")
@RestController
@RequestMapping("/api/v1/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 列表(带分页)
     *
     * @param listDTO
     * @return
     */
    @ApiOperation("用户列表")
    @GetMapping
    public JsonResult selectAll(UserListFromDTO listDTO) {
        PageResult pageResult = userService.selectList(listDTO);
        return JsonResult.success(pageResult);
    }

    /**
     * 列表
     *
     * @return
     */
    @ApiOperation("所有用户")
    @PostMapping("/selector")
    public JsonResult userSelectorList() {
        return JsonResult.success(userService.userSelector());
    }

    /**
     * 信息
     *
     * @param dto
     * @return
     */
    @ApiOperation("用户信息")
    @GetMapping("/info")
    public JsonResult selectById(IdDTO dto) {
        UserInfoVO data = userService.selectById(dto.getId());
        return JsonResult.success(data);
    }

    /**
     * 新增用户
     *
     * @param crFromDTO
     * @return
     */
    @ApiOperation("管理员新增用户")
    @PostMapping
    public JsonResult insert(@RequestBody UserCrFromDTO crFromDTO) {
        userService.insert(crFromDTO);
        return JsonResult.success();
    }

    /**
     * 修改信息
     *
     * @param upFromDTO
     * @return
     */
    @ApiOperation("用户编辑")
    @PutMapping
    public JsonResult update(@RequestBody UserUpFromDTO upFromDTO) {
        userService.update(upFromDTO);
        return JsonResult.success();
    }

    /**
     * 修改密码
     *
     * @param upPassDTO
     * @return
     */
    @ApiOperation("修改密码")
    @PostMapping("/updPass")
    public JsonResult updPass(@RequestBody UserUpPassDTO upPassDTO) {
        userService.updPass(upPassDTO);
        return JsonResult.success();
    }

    /**
     * 逻辑删除
     *
     * @param dto
     * @return
     */
    @ApiOperation("用户删除")
    @DeleteMapping
    public JsonResult delete(@RequestBody IdDTO dto) {
        userService.delete(dto);
        return JsonResult.success();
    }

    /**
     * 用户头像路径
     *
     * @return
     */
    @ApiOperation("用户头像路径")
    @GetMapping("/profileQuery")
    public JsonResult userProfilePathQuery() {
        return JsonResult.success(userService.userProfilePathQuery());
    }

    /**
     * 用户头像上传
     *
     * @param fileDTO
     * @return
     */
    @ApiOperation("用户头像上传")
    @PostMapping("/profileUpload")
    public JsonResult addUserProfile(FileDTO fileDTO) {
        userService.addUserProfile(fileDTO);
        return JsonResult.success();
    }

}
